/*
  柠檬水找零
  题目描述
    在柠檬水摊上，每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品，一次购买一杯。
    每位顾客只买一杯柠檬水，然后向你付 5 美元、10 美元或 20 美元。
    你必须给每个顾客正确找零，也就是说净交易是每位顾客向你支付 5 美元。
    注意，一开始你手头没有任何零钱。

    给你一个整数数组 bills ，其中 bills[i] 是第 i 位顾客付的账。
    如果你能给每位顾客正确找零，返回 true ，否则返回 false 。
  输入
    输入一个整数 n，代表有 n（1 < n < 100）位顾客，
    接下来包括 n 个正整数，分别表示每位顾客付的账。
  输出
    1 或 0，表示 true 或 false.
  样例输入
    5
    5 5 5 10 20
  样例输出
    1
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    int a5 = 0;   // 已有 5 元钱的张数
    int a10 = 0;  // 已有 10 元钱的张数

    cin >> n;
    for (int i  = 1; i <= n; i++) {
        int x;

        cin >> x;
        if (i == 1 && x != 5) {
            cout << 0;
            return 0;
        } else {
            if (x == 5) {  // 收到 5 元钱时, 不用找零, 已有的 5 元钱的张数加 1
                a5++;
                continue;
            } else if (x == 10) { // 收到 10 元钱时, 如果已有的 5 元钱的张数大于 0, 则可以找零钱; 否则无法找零钱
                if (a5 >= 1) {
                    a5--;
                    a10++;
                } else {
                    cout << 0;
                    return 0;
                }
            } else { // 收到 20 元钱时, 优先找 10 + 5 各一张, 其次 找 5 元钱 * 3
                if (a5 >= 1 && a10 >= 1) {
                    a5--;
                    a10--;
                } else if (a5 >= 3) {
                    a5 = a5 - 3;
                } else {
                    cout << 0;
                    return 0;
                }
            }
        }
    }
    cout << 1;

    return 0;
}